package gui.pessoa;

import excecoes.pessoa.CpfCnpjExistenteException;
import excecoes.pessoa.LocalizacaoInvalidaException;
import java.awt.event.ActionEvent;
import java.sql.SQLException;
import excecoes.estoque.DinheiroNegativoException;
import excecoes.pessoa.CpfCnpjInvalidoException;
import excecoes.pessoa.NomeInvalidoException;
import banco.pessoa.BancoCliente;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import smartMarket.pessoa.Cliente;

@SuppressWarnings("serial")
public class JFrameTableCadastroCliente extends JFrameTableCadastro {

    // Atributos
    private boolean buscar;
    
    
    // Construtor
    public JFrameTableCadastroCliente() {
        super("Cliente");

        listaBanco();
    }
    
    private void listaBanco() {
        try {
            
            BancoCliente bc = new BancoCliente();
            listaBanco(bc.listar());
            
        } catch (CpfCnpjExistenteException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        } catch (LocalizacaoInvalidaException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        } catch (NullPointerException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        } catch (NomeInvalidoException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        } catch (DinheiroNegativoException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        } catch (CpfCnpjInvalidoException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }
    

    @Override
    protected void jButtonNovoActionPerformed(ActionEvent evt) {
        if (buscar) {
            limpaBanco();
            listaBanco();
            buscar = false;
        }
        new JFrameNovoCliente().setVisible(true);
    }

    @Override
    protected void jButtonAlterarActionPerformed(ActionEvent evt) {
        if (buscar) {
            limpaBanco();
            listaBanco();
            buscar = false;
        }
        
        int linha = jTableBanco.getSelectedRow();
        String cpf = (String) model.getValueAt(linha, 1);

        new JFrameNovoCliente(cpf, linha).setVisible(true);

    }

    @Override
    protected void jButtonExcluirActionPerformed(ActionEvent evt) {
        int linha  = jTableBanco.getSelectedRow();
        int codigo = Integer.parseInt( "" + model.getValueAt(linha, 0) );
        
        try {
            
            BancoCliente bc = new BancoCliente();
            Cliente cliente = bc.buscar(codigo);
            bc.excluir(cliente);
            JFrameTableCadastroCliente.model.removeRow(linha);
            JOptionPane.showMessageDialog(null, "Cliente excluído com sucesso");
        
        } catch (CpfCnpjExistenteException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        } catch (LocalizacaoInvalidaException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        } catch (SQLException SQLe) {
            JOptionPane.showMessageDialog(null, SQLe.getMessage());
        } catch (NullPointerException npe) {
            JOptionPane.showMessageDialog(null, npe.getMessage());
        } catch (NomeInvalidoException nie) {
            JOptionPane.showMessageDialog(null, nie.getMessage());
        } catch (DinheiroNegativoException dne) {
            JOptionPane.showMessageDialog(null, dne.getMessage());
        } catch (CpfCnpjInvalidoException CPFie) {
            JOptionPane.showMessageDialog(null, CPFie.getMessage());
        }
    }

    @Override
    protected void jButtonBuscarActionPerformed(ActionEvent evt) {
        limpaBanco();
        buscar = true;
    }
}
